home *** CD-ROM | disk | FTP | other *** search
/ Cream of the Crop 26 / Cream of the Crop 26.iso / program / wdj0897.zip / TOMLINSN.ZIP / CLNT.C < prev    next >
C/C++ Source or Header  |  1997-05-29  |  2KB  |  74 lines

  1. #include <windows.h>
  2. #include <stdio.h>
  3. #include <tchar.h>
  4.  
  5. int main(void)
  6. {
  7.     HANDLE hPipe;
  8.     TCHAR  szPipe[64], RdBuffer[1024], WrBuffer[1024];
  9.     int    i;
  10.     DWORD  Size;
  11.     DWORD  dwProcessId = GetCurrentProcessId();
  12.     LPTSTR pszCmdLine;
  13.     DWORD  dwMode = PIPE_READMODE_MESSAGE | PIPE_WAIT;
  14.     
  15.     //
  16.     // Machine name (if any) is passed as command line param.
  17.     //
  18.     pszCmdLine = GetCommandLine();
  19.     while (*pszCmdLine && *pszCmdLine != TEXT(' ')) {
  20.         pszCmdLine++;
  21.     } 
  22.  
  23.     if (*pszCmdLine) {
  24.         wsprintf(szPipe,TEXT("\\\\%s\\pipe\\wdjpipe1"),++pszCmdLine);
  25.     } else {
  26.         lstrcpy(szPipe,TEXT("\\\\.\\pipe\\wdjpipe1"));
  27.     }
  28.  
  29.     //
  30.     // Connect to an available instance of the named pipe.
  31.     //
  32.  
  33.     _tprintf(TEXT("CLNT: Attempting connection to pipe %s\n"),
  34.             szPipe);
  35.  
  36.     while (TRUE) {
  37.  
  38.         hPipe = CreateFile(szPipe, GENERIC_READ | GENERIC_WRITE, 0, 
  39.                   NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
  40.  
  41.         if (hPipe != INVALID_HANDLE_VALUE) break;
  42.  
  43.         if (GetLastError() != ERROR_PIPE_BUSY) {
  44.             _tprintf(TEXT("CLNT: Open failed %d\n"), GetLastError());
  45.             return EXIT_FAILURE;
  46.         }
  47.  
  48.         // if busy, wait 30 seconds
  49.         if (!WaitNamedPipe(szPipe, 30000)) {
  50.             _tprintf(TEXT("CLNT: Exceeded wait for pipe\n"));
  51.             return EXIT_FAILURE;
  52.         }
  53.     }
  54.  
  55.     SetNamedPipeHandleState(hPipe, &dwMode, NULL, NULL);
  56.  
  57.     for (i=0; i < 5000; i++) {
  58.  
  59.         wsprintf(WrBuffer, TEXT("Client-%d-%d"), dwProcessId, i);
  60.         Size = (lstrlen(WrBuffer)+1) * sizeof(TCHAR);
  61.  
  62.         if (!TransactNamedPipe(hPipe, &WrBuffer, Size, RdBuffer, 1024, 
  63.                                &Size, NULL)) {
  64.            CloseHandle(hPipe);
  65.            return EXIT_FAILURE;
  66.         }
  67.         _tprintf(TEXT("CLNT wrote <%s>, read <%s>\n"),
  68.                 WrBuffer, RdBuffer);
  69.     }
  70.  
  71.     CloseHandle(hPipe);
  72.     return EXIT_SUCCESS;
  73. }
  74.